#ifndef __STRUCT_CHAINEES_H__
#define __STRUCT_CHAINEES_H__
#include <stdlib.h>

struct	s_arc ;
typedef struct	s_arc *type ;

void	affiche(type *element) ;

/* Listes : */
typedef struct	s_cellule
{
	type				element ;
	struct s_cellule	*next ;
}				t_maillon ;


typedef struct	s_cellule*	Liste ;

int		est_vide(Liste l)	;

void	visualiser_liste(Liste l)	;

Liste	creer_liste(void) ;

Liste	ajout_tete(type *element , Liste l)	;


Liste	supprimer_tete(Liste l) ;

Liste	ajout_queue(type *element, Liste l)	;


Liste	supprimen(int n, Liste l)	;

/* Files : */
typedef Liste File ;

File creer_file(void);/* Créer une file vide*/

int file_vide(File f);/*Teste si la file est vide*/

void visualiser_file(File f);

File enfiler(type element, File f);/* Ajoute une element à la file par la queue*/

type defiler(File *f);/* Renvoie la element en tete de file ET la supprime de la file*/

/* Piles : */

/* Premiere solution du TP : 
	On définit une Pile à partir d'une liste à l'aide d'un typedef
	Decommenter la ligne suivante si vous vous voulez utiliser cette solution */

typedef Liste Pile ;


/* Prototypes  */
/* ATTENTION:  plusieurs de ces fonctions n'ont pas de sens avec une Pile vide	*/

int pile_vide(Pile p) ;	/* une Pile vide sera representée par NULL*/
Pile creer_pile(void) ;	/* une Pile vide sera representée par NULL*/
Pile empiler(type *element, Pile p) ; /* Ajoute une element au sommet de la Pile */
Pile supprimer_pile(Pile p) ; /* Supprime le sommet de Pile */
type sommet(Pile p) ;	/* Retourne la element au sommet SANS modifier la Pile */
type depiler(Pile *p) ;	/* Retourne la element au sommet et la supprime de la Pile */
int taille_pile(Pile p) ; /* Nombre d'elements de la Pile */
void visualiser_pile(Pile p) ; /* Affichage de tous les elements de la Pile sans la modifier */


#endif
